package lg.minecraft.plugin.pokedex.storage;

import com.cobblemon.mod.common.pokemon.Species;
import lg.minecraft.plugin.pokedex.Generations;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.UUID;

/**
 * @author langle__
 * @version 1.0
 */
public abstract class DataStorage {

    /**
     * 设置指定世代奖励是否已领取
     * @param uuid 用户唯一标识
     * @param gen 世代枚举
     * @param claimed 是否已领取奖励
     */
    public abstract void setGenerationRewardClaimed(@NotNull UUID uuid, @NotNull Generations gen, boolean claimed);

    /**
     * 判断指定世代奖励是否已领取
     * @param uuid 用户唯一标识
     * @param gen 世代枚举
     * @return 是否已领取奖励
     */
    public abstract boolean isGenerationRewardClaimed(@NotNull UUID uuid, @NotNull Generations gen);

    // 标记精灵为已领取
    public abstract void markSpeciesAsReceived(@NotNull UUID uuid, @NotNull Species species);

    // 取消标记精灵为已领取
    public abstract void unmarkSpeciesAsReceived(@NotNull UUID uuid, @NotNull Species species);

    // 判断精灵是否已领取
    public abstract boolean hasSpeciesBeenReceived(@NotNull UUID uuid, @NotNull Species species);

    /**
     * 获取用户已领取奖励的精灵列表
     * @param uuid 用户唯一标识
     * @return 已领取的精灵名称列表
     */
    public abstract List<String> getClaimedRewardSpecies(@NotNull UUID uuid);

}
